home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / sys / stat.h < prev    next >
C/C++ Source or Header  |  2006-05-08  |  13KB  |  421 lines

  1. /* Copyright (C) 1991,1992,1995-2002,2003,2004 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.  
  4.    The GNU C Library is free software; you can redistribute it and/or
  5.    modify it under the terms of the GNU Lesser General Public
  6.    License as published by the Free Software Foundation; either
  7.    version 2.1 of the License, or (at your option) any later version.
  8.  
  9.    The GNU C Library is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.    Lesser General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU Lesser General Public
  15.    License along with the GNU C Library; if not, write to the Free
  16.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17.    02111-1307 USA.  */
  18.  
  19. /*
  20.  *    POSIX Standard: 5.6 File Characteristics    <sys/stat.h>
  21.  */
  22.  
  23. #ifndef    _SYS_STAT_H
  24. #define    _SYS_STAT_H    1
  25.  
  26. #include <features.h>
  27.  
  28. #include <bits/types.h>        /* For __mode_t and __dev_t.  */
  29.  
  30. #if defined __USE_XOPEN || defined __USE_MISC
  31. # if defined __USE_XOPEN || defined __USE_XOPEN2K
  32. #  define __need_time_t
  33. # endif
  34. # ifdef __USE_MISC
  35. #  define __need_timespec
  36. # endif
  37. # include <time.h>        /* For time_t resp. timespec.  */
  38. #endif
  39.  
  40. #if defined __USE_XOPEN || defined __USE_XOPEN2K
  41. /* The Single Unix specification says that some more types are
  42.    available here.  */
  43. # ifndef __dev_t_defined
  44. typedef __dev_t dev_t;
  45. #  define __dev_t_defined
  46. # endif
  47.  
  48. # ifndef __gid_t_defined
  49. typedef __gid_t gid_t;
  50. #  define __gid_t_defined
  51. # endif
  52.  
  53. # ifndef __ino_t_defined
  54. #  ifndef __USE_FILE_OFFSET64
  55. typedef __ino_t ino_t;
  56. #  else
  57. typedef __ino64_t ino_t;
  58. #  endif
  59. #  define __ino_t_defined
  60. # endif
  61.  
  62. # ifndef __mode_t_defined
  63. typedef __mode_t mode_t;
  64. #  define __mode_t_defined
  65. # endif
  66.  
  67. # ifndef __nlink_t_defined
  68. typedef __nlink_t nlink_t;
  69. #  define __nlink_t_defined
  70. # endif
  71.  
  72. # ifndef __off_t_defined
  73. #  ifndef __USE_FILE_OFFSET64
  74. typedef __off_t off_t;
  75. #  else
  76. typedef __off64_t off_t;
  77. #  endif
  78. #  define __off_t_defined
  79. # endif
  80.  
  81. # ifndef __uid_t_defined
  82. typedef __uid_t uid_t;
  83. #  define __uid_t_defined
  84. # endif
  85. #endif    /* X/Open */
  86.  
  87. #ifdef __USE_UNIX98
  88. # ifndef __blkcnt_t_defined
  89. #  ifndef __USE_FILE_OFFSET64
  90. typedef __blkcnt_t blkcnt_t;
  91. #  else
  92. typedef __blkcnt64_t blkcnt_t;
  93. #  endif
  94. #  define __blkcnt_t_defined
  95. # endif
  96.  
  97. # ifndef __blksize_t_defined
  98. typedef __blksize_t blksize_t;
  99. #  define __blksize_t_defined
  100. # endif
  101. #endif    /* Unix98 */
  102.  
  103. __BEGIN_DECLS
  104.  
  105. #include <bits/stat.h>
  106.  
  107. #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
  108. # define S_IFMT        __S_IFMT
  109. # define S_IFDIR    __S_IFDIR
  110. # define S_IFCHR    __S_IFCHR
  111. # define S_IFBLK    __S_IFBLK
  112. # define S_IFREG    __S_IFREG
  113. # ifdef __S_IFIFO
  114. #  define S_IFIFO    __S_IFIFO
  115. # endif
  116. # ifdef __S_IFLNK
  117. #  define S_IFLNK    __S_IFLNK
  118. # endif
  119. # if (defined __USE_BSD || defined __USE_MISC || defined __USE_UNIX98) \
  120.      && defined __S_IFSOCK
  121. #  define S_IFSOCK    __S_IFSOCK
  122. # endif
  123. #endif
  124.  
  125. /* Test macros for file types.    */
  126.  
  127. #define    __S_ISTYPE(mode, mask)    (((mode) & __S_IFMT) == (mask))
  128.  
  129. #define    S_ISDIR(mode)     __S_ISTYPE((mode), __S_IFDIR)
  130. #define    S_ISCHR(mode)     __S_ISTYPE((mode), __S_IFCHR)
  131. #define    S_ISBLK(mode)     __S_ISTYPE((mode), __S_IFBLK)
  132. #define    S_ISREG(mode)     __S_ISTYPE((mode), __S_IFREG)
  133. #ifdef __S_IFIFO
  134. # define S_ISFIFO(mode)     __S_ISTYPE((mode), __S_IFIFO)
  135. #endif
  136. #ifdef __S_IFLNK
  137. # define S_ISLNK(mode)     __S_ISTYPE((mode), __S_IFLNK)
  138. #endif
  139.  
  140. #if defined __USE_BSD && !defined __S_IFLNK
  141. # define S_ISLNK(mode)  0
  142. #endif
  143.  
  144. #if (defined __USE_BSD || defined __USE_UNIX98) \
  145.     && defined __S_IFSOCK
  146. # define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
  147. #endif
  148.  
  149. /* These are from POSIX.1b.  If the objects are not implemented using separate
  150.    distinct file types, the macros always will evaluate to zero.  Unlike the
  151.    other S_* macros the following three take a pointer to a `struct stat'
  152.    object as the argument.  */
  153. #ifdef    __USE_POSIX199309
  154. # define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
  155. # define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
  156. # define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
  157. #endif
  158.  
  159.  
  160. /* Protection bits.  */
  161.  
  162. #define    S_ISUID __S_ISUID    /* Set user ID on execution.  */
  163. #define    S_ISGID    __S_ISGID    /* Set group ID on execution.  */
  164.  
  165. #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
  166. /* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
  167. # define S_ISVTX    __S_ISVTX
  168. #endif
  169.  
  170. #define    S_IRUSR    __S_IREAD    /* Read by owner.  */
  171. #define    S_IWUSR    __S_IWRITE    /* Write by owner.  */
  172. #define    S_IXUSR    __S_IEXEC    /* Execute by owner.  */
  173. /* Read, write, and execute by owner.  */
  174. #define    S_IRWXU    (__S_IREAD|__S_IWRITE|__S_IEXEC)
  175.  
  176. #if defined __USE_MISC && defined __USE_BSD
  177. # define S_IREAD    S_IRUSR
  178. # define S_IWRITE    S_IWUSR
  179. # define S_IEXEC    S_IXUSR
  180. #endif
  181.  
  182. #define    S_IRGRP    (S_IRUSR >> 3)    /* Read by group.  */
  183. #define    S_IWGRP    (S_IWUSR >> 3)    /* Write by group.  */
  184. #define    S_IXGRP    (S_IXUSR >> 3)    /* Execute by group.  */
  185. /* Read, write, and execute by group.  */
  186. #define    S_IRWXG    (S_IRWXU >> 3)
  187.  
  188. #define    S_IROTH    (S_IRGRP >> 3)    /* Read by others.  */
  189. #define    S_IWOTH    (S_IWGRP >> 3)    /* Write by others.  */
  190. #define    S_IXOTH    (S_IXGRP >> 3)    /* Execute by others.  */
  191. /* Read, write, and execute by others.  */
  192. #define    S_IRWXO    (S_IRWXG >> 3)
  193.  
  194.  
  195. #ifdef    __USE_BSD
  196. /* Macros for common mode bit masks.  */
  197. # define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
  198. # define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
  199. # define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
  200.  
  201. # define S_BLKSIZE    512    /* Block size for `st_blocks'.  */
  202. #endif
  203.  
  204.  
  205. #ifndef __USE_FILE_OFFSET64
  206. /* Get file attributes for FILE and put them in BUF.  */
  207. extern int stat (__const char *__restrict __file,
  208.          struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
  209.  
  210. /* Get file attributes for the file, device, pipe, or socket
  211.    that file descriptor FD is open on and put them in BUF.  */
  212. extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
  213. #else
  214. # ifdef __REDIRECT_NTH
  215. extern int __REDIRECT_NTH (stat, (__const char *__restrict __file,
  216.                   struct stat *__restrict __buf), stat64)
  217.      __nonnull ((1, 2));
  218. extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
  219.      __nonnull ((2));
  220. # else
  221. #  define stat stat64
  222. #  define fstat fstat64
  223. # endif
  224. #endif
  225. #ifdef __USE_LARGEFILE64
  226. extern int stat64 (__const char *__restrict __file,
  227.            struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
  228. extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
  229. #endif
  230.  
  231. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  232. # ifndef __USE_FILE_OFFSET64
  233. /* Get file attributes about FILE and put them in BUF.
  234.    If FILE is a symbolic link, do not follow it.  */
  235. extern int lstat (__const char *__restrict __file,
  236.           struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
  237. # else
  238. #  ifdef __REDIRECT_NTH
  239. extern int __REDIRECT_NTH (lstat,
  240.                (__const char *__restrict __file,
  241.                 struct stat *__restrict __buf), lstat64)
  242.      __nonnull ((1, 2));
  243. #  else
  244. #   define lstat lstat64
  245. #  endif
  246. # endif
  247. # ifdef __USE_LARGEFILE64
  248. extern int lstat64 (__const char *__restrict __file,
  249.             struct stat64 *__restrict __buf)
  250.      __THROW __nonnull ((1, 2));
  251. # endif
  252. #endif
  253.  
  254. /* Set file access permissions for FILE to MODE.
  255.    If FILE is a symbolic link, this affects its target instead.  */
  256. extern int chmod (__const char *__file, __mode_t __mode)
  257.      __THROW __nonnull ((1));
  258.  
  259. #ifdef __USE_BSD
  260. /* Set file access permissions for FILE to MODE.
  261.    If FILE is a symbolic link, this affects the link itself
  262.    rather than its target.  */
  263. extern int lchmod (__const char *__file, __mode_t __mode)
  264.      __THROW __nonnull ((1));
  265. #endif
  266.  
  267. /* Set file access permissions of the file FD is open on to MODE.  */
  268. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  269. extern int fchmod (int __fd, __mode_t __mode) __THROW;
  270. #endif
  271.  
  272.  
  273. /* Set the file creation mask of the current process to MASK,
  274.    and return the old creation mask.  */
  275. extern __mode_t umask (__mode_t __mask) __THROW;
  276.  
  277. #ifdef    __USE_GNU
  278. /* Get the current `umask' value without changing it.
  279.    This function is only available under the GNU Hurd.  */
  280. extern __mode_t getumask (void) __THROW;
  281. #endif
  282.  
  283. /* Create a new directory named PATH, with permission bits MODE.  */
  284. extern int mkdir (__const char *__path, __mode_t __mode)
  285.      __THROW __nonnull ((1));
  286.  
  287. /* Create a device file named PATH, with permission and special bits MODE
  288.    and device number DEV (which can be constructed from major and minor
  289.    device numbers with the `makedev' macro above).  */
  290. #if defined __USE_MISC || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  291. extern int mknod (__const char *__path, __mode_t __mode, __dev_t __dev)
  292.      __THROW __nonnull ((1));
  293. #endif
  294.  
  295.  
  296. /* Create a new FIFO named PATH, with permission bits MODE.  */
  297. extern int mkfifo (__const char *__path, __mode_t __mode)
  298.      __THROW __nonnull ((1));
  299.  
  300. /* To allow the `struct stat' structure and the file type `mode_t'
  301.    bits to vary without changing shared library major version number,
  302.    the `stat' family of functions and `mknod' are in fact inline
  303.    wrappers around calls to `xstat', `fxstat', `lxstat', and `xmknod',
  304.    which all take a leading version-number argument designating the
  305.    data structure and bits used.  <bits/stat.h> defines _STAT_VER with
  306.    the version number corresponding to `struct stat' as defined in
  307.    that file; and _MKNOD_VER with the version number corresponding to
  308.    the S_IF* macros defined therein.  It is arranged that when not
  309.    inlined these function are always statically linked; that way a
  310.    dynamically-linked executable always encodes the version number
  311.    corresponding to the data structures it uses, so the `x' functions
  312.    in the shared library can adapt without needing to recompile all
  313.    callers.  */
  314.  
  315. #ifndef _STAT_VER
  316. # define _STAT_VER    0
  317. #endif
  318. #ifndef _MKNOD_VER
  319. # define _MKNOD_VER    0
  320. #endif
  321.  
  322. /* Wrappers for stat and mknod system calls.  */
  323. #ifndef __USE_FILE_OFFSET64
  324. extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
  325.      __THROW __nonnull ((3));
  326. extern int __xstat (int __ver, __const char *__filename,
  327.             struct stat *__stat_buf) __THROW __nonnull ((2, 3));
  328. extern int __lxstat (int __ver, __const char *__filename,
  329.              struct stat *__stat_buf) __THROW __nonnull ((2, 3));
  330. #else
  331. # ifdef __REDIRECT_NTH
  332. extern int __REDIRECT_NTH (__fxstat, (int __ver, int __fildes,
  333.                       struct stat *__stat_buf), __fxstat64)
  334.      __nonnull ((3));
  335. extern int __REDIRECT_NTH (__xstat, (int __ver, __const char *__filename,
  336.                      struct stat *__stat_buf), __xstat64)
  337.      __nonnull ((2, 3));
  338. extern int __REDIRECT_NTH (__lxstat, (int __ver, __const char *__filename,
  339.                       struct stat *__stat_buf), __lxstat64)
  340.      __nonnull ((2, 3));
  341.  
  342. # else
  343. #  define __fxstat __fxstat64
  344. #  define __xstat __xstat64
  345. #  define __lxstat __lxstat64
  346. # endif
  347. #endif
  348.  
  349. #ifdef __USE_LARGEFILE64
  350. extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
  351.      __THROW __nonnull ((3));
  352. extern int __xstat64 (int __ver, __const char *__filename,
  353.               struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
  354. extern int __lxstat64 (int __ver, __const char *__filename,
  355.                struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
  356. #endif
  357. extern int __xmknod (int __ver, __const char *__path, __mode_t __mode,
  358.              __dev_t *__dev) __THROW __nonnull ((2, 4));
  359.  
  360. #if defined __GNUC__ && __GNUC__ >= 2
  361. /* Inlined versions of the real stat and mknod functions.  */
  362.  
  363. extern __inline__ int
  364. __NTH (stat (__const char *__path, struct stat *__statbuf))
  365. {
  366.   return __xstat (_STAT_VER, __path, __statbuf);
  367. }
  368.  
  369. # if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  370. extern __inline__ int
  371. __NTH (lstat (__const char *__path, struct stat *__statbuf))
  372. {
  373.   return __lxstat (_STAT_VER, __path, __statbuf);
  374. }
  375. # endif
  376.  
  377. extern __inline__ int
  378. __NTH (fstat (int __fd, struct stat *__statbuf))
  379. {
  380.   return __fxstat (_STAT_VER, __fd, __statbuf);
  381. }
  382.  
  383. # if defined __USE_MISC || defined __USE_BSD
  384. extern __inline__ int
  385. __NTH (mknod (__const char *__path, __mode_t __mode, __dev_t __dev))
  386. {
  387.   return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
  388. }
  389. # endif
  390.  
  391. # if defined __USE_LARGEFILE64 \
  392.   && (! defined __USE_FILE_OFFSET64 \
  393.       || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
  394. extern __inline__ int
  395. __NTH (stat64 (__const char *__path, struct stat64 *__statbuf))
  396. {
  397.   return __xstat64 (_STAT_VER, __path, __statbuf);
  398. }
  399.  
  400. #  if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  401. extern __inline__ int
  402. __NTH (lstat64 (__const char *__path, struct stat64 *__statbuf))
  403. {
  404.   return __lxstat64 (_STAT_VER, __path, __statbuf);
  405. }
  406. #  endif
  407.  
  408. extern __inline__ int
  409. __NTH (fstat64 (int __fd, struct stat64 *__statbuf))
  410. {
  411.   return __fxstat64 (_STAT_VER, __fd, __statbuf);
  412. }
  413. # endif
  414.  
  415. #endif
  416.  
  417. __END_DECLS
  418.  
  419.  
  420. #endif /* sys/stat.h  */
  421.